public class 基本计算器II {
    public int calculate(String ss) {
        char[] s = ss.toCharArray();
        int n = s.length;
        // 存储每次运算后的数
        int[] stack = new int[n];
        int cnt = 0; // 栈顶
        char op = '+'; // 记录当前的符号
        int i = 0; // 字符串的指针
        while (i < n) {
            if (s[i] == ' ') {
                // 空格直接跳过
                i++;
            } else if (s[i] >= '0' && s[i] <= '9') {
                // 数字计算一下数字的具体大小
                int tmp = 0;
                while (i < n && s[i] >= '0' && s[i] <= '9') {
                    tmp = tmp * 10 + s[i] - '0';
                    i++;
                }
                // 判断当前的符号位是什么, 进行计算并压栈
                // 乘除直接栈顶进行计算
                if (op == '+') {
                    stack[cnt++] = tmp;
                } else if (op == '-') {
                    stack[cnt++] = -tmp;
                } else if (op == '*') {
                    stack[cnt - 1] *= tmp;
                } else {
                    stack[cnt - 1] /= tmp;
                }
            } else {
                // 符号位更新并指向下一位
                op = s[i];
                i++;
            }
        }
        // 将栈中的所有值相加
        int ans = 0;
        while (--cnt >= 0) {
            ans += stack[cnt];
        }
        return ans;
    }
}
